import request from "@/utils/request";
import type {
  GetTrademarkListResponse,
  TrademarkItem,
  TrademarkList,
} from "./model/trademarkModel";

// 枚举
// 统一定义所有接口的请求地址
enum Api {
  getTrademarkListUrl = "/admin/product/baseTrademark",
  getAllTrademarkListUrl = "/admin/product/baseTrademark/getTrademarkList",
  saveTrademarkUrl = "/admin/product/baseTrademark/save",
  delTrademarkUrl = "/admin/product/baseTrademark/remove",
  updateTrademarkUrl = "/admin/product/baseTrademark/update",
}
/*
  上述枚举编译成js后：
  {
    getTrademarkListUrl: "/admin/product/baseTrademark",
    "/admin/product/baseTrademark": "getTrademarkListUrl"
  }
*/

/**
 * 获取品牌分页列表
 * @param page 当前页码
 * @param limit 每页条数
 * @returns GetTrademarkListResponse
 */
export const getTrademarkListApi = (page: number, limit: number) => {
  // 函数的参数看接口需不需要参数
  // 1-2个参数直接写
  // 3个参数以上，定义成对象形式

  // 将来发送请求的地址：/admin/product/baseTrademark/1/10
  // 整个getTrademarkListApi函数的返回值，就是request.get函数的返回值
  /*
    get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
      <T = any, R = AxiosResponse<T>, D = any> 
        get的函数的泛型参数
          T = any
          R = AxiosResponse<T>
          D = any
      (url: string, config?: AxiosRequestConfig<D>) 
        get函数参数以及类型
        
      :Promise<R>
        get函数返回值类型
        R就是Promise内部结果值类型（也就是await得到值的类型）
  */
  return request.get<any, GetTrademarkListResponse>(
    `${Api.getTrademarkListUrl}/${page}/${limit}`
  );
};

/**
 * 获取所有品牌数据
 * @returns TrademarkList
 */
export const getAllTrademarkListApi = () => {
  return request.get<any, TrademarkList>(Api.getAllTrademarkListUrl);
};

/**
 * 添加品牌
 * @param tmName 品牌名称
 * @param logoUrl 品牌LOGO
 * @returns null
 */
export const saveTrademarkApi = (tmName: string, logoUrl: string) => {
  // 除了get请求有返回值，其他请求类型返回值都是null
  return request.post<any, null>(Api.saveTrademarkUrl, {
    tmName,
    logoUrl,
  });
};

/**
 * 删除品牌
 * @param id 品牌id
 * @returns null
 */
export const delTrademarkApi = (id: number) => {
  return request.delete<any, null>(Api.delTrademarkUrl + `/${id}`);
};

/**
 * 修改品牌
 * @param tm 品牌数据
 * @returns null
 */
export const updateTrademarkApi = (tm: TrademarkItem) => {
  return request.put<any, null>(Api.updateTrademarkUrl, tm);
};
